#include "mysingleton.h"
mySingleton& mySingleton::instance()
{
    // 使用局部静态变量来保证线程安全的单例实例创建
    static mySingleton instance;
    return instance;
}

void mySingleton::enqueue(const QByteArray& data)
{
    QMutexLocker locker(&m_mutex);
    m_buffer.enqueue(data);
    m_notEmpty.wakeOne(); // 唤醒一个等待的线程
}

QByteArray mySingleton::dequeue(int timeout)
{
    QMutexLocker locker(&m_mutex);
    if (timeout == 0) {
        while (m_buffer.isEmpty()) {
            m_notEmpty.wait(&m_mutex); // 无限期等待直到队列非空
        }
    } else {
        if (m_buffer.isEmpty()) {
            m_notEmpty.wait(&m_mutex, timeout); // 等待指定时间
        }
    }
    if (!m_buffer.isEmpty()) {
        return m_buffer.dequeue();
    }
    return QByteArray(); // 如果超时且队列为空，返回空的 QByteArray
}

bool mySingleton::isEmpty() const
{
    QMutexLocker locker(&m_mutex);
    return m_buffer.isEmpty();
}

int mySingleton::size() const
{
    QMutexLocker locker(&m_mutex);
    return m_buffer.size();
}
